home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Pascal / Snippets / PNL Libraries / MyDimText.p < prev    next >
Encoding:
Text File  |  1996-05-29  |  3.3 KB  |  145 lines  |  [TEXT/CWIE]

  1. / / /
  2.  
  3. unit MyDimText;
  4.  
  5. interface
  6.  
  7.     uses
  8.         Dialogs;
  9.  
  10.     procedure CreateDimText (var data: univ Ptr; dlg: DialogPtr; YourDrawProc: ProcPtr);
  11.     procedure DestroyDimText (var data: univ Ptr);
  12.     procedure DrawDimText (data: univ Ptr; dlg: DialogPtr; item: integer);
  13. { Call this from YourDrawProc }
  14.     procedure SetDimKind (data: univ Ptr; dlg: DialogPtr; item: integer; dimmed: boolean);
  15.     procedure GetDimText (data: univ Ptr; dlg: DialogPtr; item: integer; var s: Str255);
  16.     procedure SetDimText (data: univ Ptr; dlg: DialogPtr; item: integer; s: Str255);
  17.  
  18. { procedure YourDrawProc(dlg: DialogPtr; item: integer); }
  19. { begin}
  20. {   DrawDimText(data,dlg,item); }
  21. { end;}
  22.  
  23. implementation
  24.  
  25.     uses
  26.         MyStrH, MyDialogs;
  27.  
  28.     type
  29.         MyData = record
  30.                 YourDrawProc: ProcPtr;
  31.                 items: StrHHandle;
  32.             end;
  33.         MyDataPtr = ^MyData;
  34.  
  35.     procedure CreateDimText (var data: univ Ptr; dlg: DialogPtr; YourDrawProc: ProcPtr);
  36.         var
  37.             md: MyDataPtr;
  38.     begin
  39.         data := NewPtr(SizeOf(MyData));
  40.         md := MyDataPtr(data);
  41.         md^.YourDrawProc := YourDrawProc;
  42.         md^.items := NewStrH;
  43.     end;
  44.  
  45.     procedure DestroyDimText (var data: univ Ptr);
  46.         var
  47.             md: MyDataPtr;
  48.     begin
  49.         md := MyDataPtr(data);
  50.         DisposeStrH(md^.items);
  51.         DisposePtr(data);
  52.         data := nil;
  53.     end;
  54.  
  55.     procedure DrawDimText (data: univ Ptr; dlg: DialogPtr; item: integer);
  56.         var
  57.             md: MyDataPtr;
  58.             r: Rect;
  59.     begin
  60.         md := MyDataPtr(data);
  61.         SetPort(dlg);
  62.         GetDItemRect(dlg, item, r);
  63.         PenNormal;
  64.         InsetRect(r, 1, 1);
  65.         EraseRect(r);
  66.         InsetRect(r, -1, -1);
  67.         TextMode(grayishTextOr);
  68.         PenPat(Pattern(gray));
  69.         FrameRect(r);
  70.         MoveTo(r.left + 3, r.bottom - 3);
  71.         DrawString(GetIndStrH(md^.items, item));
  72.         PenNormal;
  73.     end;
  74.  
  75.     procedure SetDimKind (data: univ Ptr; dlg: DialogPtr; item: integer; dimmed: boolean);
  76.         var
  77.             md: MyDataPtr;
  78.             h: Handle;
  79.             k: integer;
  80.             r: Rect;
  81.             s: Str255;
  82.             wasdimmed: boolean;
  83.     begin
  84.         md := MyDataPtr(data);
  85.         SetPort(dlg);
  86.         GetDialogItem(dlg, item, k, h, r);
  87.         wasdimmed := k = userItem;
  88.         if wasdimmed <> dimmed then begin
  89.             GetDimText(data, dlg, item, s);
  90.             SetIndStrH(md^.items, item, s);
  91.             if dimmed then begin
  92.                 TEDeactivate(DialogPeek(dlg)^.textH);
  93.                 if item = SelectedTextItem(dlg) then begin
  94.                     SelectDialogItemText(dlg, item, 0, 0);
  95.                     DialogPeek(dlg)^.editField := -1;
  96.                 end;
  97.                 InsetRect(r, -3, -3);
  98.                 SetDialogItem(dlg, item, userItem, Handle(md^.YourDrawProc), r);
  99.                 DialogPeek(dlg)^.editField := -1;
  100.                 TEActivate(DialogPeek(dlg)^.textH);
  101.                 DrawDimText(data, dlg, item);
  102.             end
  103.             else begin
  104.                 FrameRect(r);
  105.                 InsetRect(r, 1, 1);
  106.                 EraseRect(r);
  107.                 InsetRect(r, 2, 2);
  108.                 SetDialogItem(dlg, item, editText, h, r);
  109.                 SetItemText(dlg, item, s);
  110.             end;
  111.         end;
  112.     end;
  113.  
  114.     procedure GetDimText (data: univ Ptr; dlg: DialogPtr; item: integer; var s: Str255);
  115.         var
  116.             md: MyDataPtr;
  117.             k: integer;
  118.     begin
  119.         md := MyDataPtr(data);
  120.         GetDItemKind(dlg, item, k);
  121.         if k = userItem then begin
  122.             s := GetIndStrH(md^.items, item);
  123.         end
  124.         else begin
  125.             GetItemText(dlg, item, s);
  126.         end;
  127.     end;
  128.  
  129.     procedure SetDimText (data: univ Ptr; dlg: DialogPtr; item: integer; s: Str255);
  130.         var
  131.             md: MyDataPtr;
  132.             k: integer;
  133.     begin
  134.         md := MyDataPtr(data);
  135.         GetDItemKind(dlg, item, k);
  136.         if k = userItem then begin
  137.             SetIndStrH(md^.items, item, s);
  138.             DrawDimText(data, dlg, item);
  139.         end
  140.         else begin
  141.             SetItemText(dlg, item, s);
  142.         end;
  143.     end;
  144.  
  145. end.